
// 构造函数继承(也叫伪造对象或者经典继承)
// 优点：可以给父类传参数,避免了共享属性
// 缺点：（1）只是子类的实例，不是父类的实例，不能调用父类原型上的属性。
// （2）每次实例化一个对象都会在内存中创建一份。
function Person(age){
    this.age = age || 18;
    this.eat = function(){
        console.log('eat')
    }
}

Person.prototype.work = function(){
    console.log('sleeping')
}
Person.prototype.isHappy = true;

function Son(name,age = 10){
    Person.call(this,age);
    this.name = name;
}

let son1 = new Son('lucy',11);
let son2 = new Son('lucy',12);
console.log(son1); // { age: 11, eat: [Function], name: 'lucy' }
console.log(son2); // { age: 12, eat: [Function], name: 'lucy' }
console.log(son1.name); // lucy
console.log(son1.age); // 11
// son1.work(); //TypeError: son1.work is not a function
console.log(son1 instanceof Son); // true
console.log(son1 instanceof Person); // false

son1.eat(); // eat
console.log(son1.eat === son2.eat); // false
console.log(son1.isHappy); // undefined